Systems that manage large numbers or amounts of resources often must impose organizational structures onto the collection of resources in order to manage the collection in a rational way. Preferably, the organization is along natural boundaries that consider real, physical characteristics and constraints of the collection and its individual components. The difficulties of managing large and complex collections of resources may be mitigated via the use of high level abstractions to represent, in simplified form, certain aspects of the system, the collections or resources, and the organization imposed thereon.
A large data storage array is an illustrative example. A traditional storage array (herein also referred to as a “disk storage array”, “disk array”, or simply “array”) is a collection of storage entities, such as hard disk drives, solid state drives, tape drives, or other entities used to store information (for simplicity, hereinafter referred to as “disks”), operating together logically as a unified storage device. A storage array may be thought of as a system for managing a large amount of a resource, i.e., a large number of disk sectors. Management of the resource may include allocation of a portion of the resource in response to allocation requests. In the storage array example, portions of the storage array may be allocated to, i.e., exclusively used by, entities that request such allocation. One issue that may be considered during allocation of a resource is the selection process—namely, how to determine which unallocated portion of the collection of resources is to be allocated to the requesting entity.
Conventional allocation methods fall into two categories: allocation methods that use naive algorithms, i.e., algorithms that do not consider the organization or underlying characteristics and constraints of the resources, and allocation methods that use ad hoc algorithms, i.e., algorithms that are designed for a particular end or case at hand without consideration of the wider application. Both types of algorithms have disadvantages: because naive algorithms don't consider the current use of resources, they tend to make inefficient use of those resources, while ad hoc algorithms are usually rigid and inflexible, and tend to be hard-coded, making them difficult to modify. Using the storage array example above, a naive algorithm may simply allocate a portion of the storage array without considering bus, RAID group, or LU capacity. An ad hoc algorithm may consider these parameters, but the algorithm must be customized for the particulars of the resources to be managed, and once defined, may not be subsequently modified.
Accordingly, there exists a need to manage system resources in a non-naive manner, but without the rigidity of conventional ad hoc implementations. Specifically, there exists a need for methods, systems, and computer readable medium for dynamic, policy-based allocation of system resources.